<template>
  <div>
    111
  </div>
</template>


<script setup lang="ts">


// Promise   承偌
// 1. 什么是Promise ？
// Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数（回调地狱）和事件——更合理和更强大。

//  1.1.同步 异步？
//  同步就是代码 从上到下， 从左向右执行的代码
//  异步代码： 非同步全是异步

// 2. Promise 有设么用？ 可以解决什么问题？
// 回调函数（回调地狱）

// 3. 怎么用？

// Promise 三个状态
//  pendding    等待中
//  fulfilled   成功
//  rejected    失败
//  状态改变  pendding => fulfilled   pendding => rejected

// const p = new Promise((resolve, reject) => {
//   resolve(666666)
// })

// p.then((result) => { console.log('then 执行', result) })
//   .catch((result) => { console.log('catch 执行', result) })
//   .finally(() => { console.log('finally 执行') })


// Promise.resolve(2).then(result => {
//   console.log('result: ', result)
// })




// 1. 需要
// 1s => 1
// 2S => 2
// 3S => 3
// 4S => 4
// 5S => 5

// function delay(timer: number) {
//   return new Promise((resolve, reject) => {
//     setTimeout(resolve, timer)
//   })
// }

// console.time('1')
// delay(1000).then(() => {
//   console.log(1);
//   return delay(2000)
// }).then(() => {
//   console.log(2)
//   return delay(3000)
// }).then(() => {
//   console.log(3)
//   return delay(4000)
// }).then(() => {
//   console.log(4)
//   return delay(5000)
// }).then(() => {
//   console.log(5)
//   console.timeEnd('1')
// })


// async await
// async function run() {
//   await delay(1000)
//   console.log(1)
//   await delay(2000)
//   console.log(2)
//   await delay(3000)
//   console.log(3)
//   await delay(4000)
//   console.log(4)
//   await delay(5000)
//   console.log(5)
// }

// run()


// EventLoop  事件循环 面试题
// 练习1

// console.log(1)

// setTimeout(function () {
//   console.log(2)
//   Promise.resolve().then(() => {
//     console.log(7)
//   })
// }, 0)

// setTimeout(() => {
//   console.log(10)
// }, 10)
// new Promise(resolve => {
//   console.log(3)
//   setTimeout(() => {
//     console.log(9)
//   })
//   resolve()
// })
//   .then(function () {
//     console.log(4)
//   })
//   .then(function () {
//     console.log(5)
//   })

// Promise.reject().then(() => {
//   console.log(8)
// })
// console.log(6)


// Set, Map
// const s1 = new Set([1, 1, 1, 1, 1, 2, 2, 2, 2])

// s1.add(3)
// s1.delete(2)
// s1.forEach(v => {
//   console.log(v)
// })
// console.log('size: ', s1.size)
// console.log('你有2吗？', s1.has(2))


// Map   Object {}

// const m1 = new Map();
// const fn = () => { }
// m1.set('name', '张三')
// m1.set('age', 18)
// m1.set(fn, 1)
// m1.set([{}, { name: '123' }], 123456)

// console.log(m1)
// console.log(m1.get(fn))



// class  类

class Animal {
  name: string
  // 构造器  类实例化构造器执行
  constructor(name: string) {
    this.name = name
    console.log('constructor 执行了', name)
  }
  // 原型方法
  say(content: string) {
    console.log(`动物 ${this.name} ${content}了`)
  }
}


const dog = new Animal('狗')
const pig = new Animal('猪')
dog.say('汪汪')
pig.say('嗡嗡')
console.log(dog, pig)
</script>